package com.ruoyi.resitExam.service.impl;

import java.util.List;
import java.math.BigDecimal;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.resitExam.mapper.SysResitExamMapper;
import com.ruoyi.resitExam.domain.SysResitExam;
import com.ruoyi.resitExam.service.ISysResitExamService;
import com.ruoyi.common.exception.ServiceException;

/**
 * 学生补考Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-05-06
 */
@Service
public class SysResitExamServiceImpl implements ISysResitExamService {
    @Autowired
    private SysResitExamMapper sysResitExamMapper;

    /**
     * 查询学生补考
     * 
     * @param resitId 学生补考主键
     * @return 学生补考
     */
    @Override
    public SysResitExam selectSysResitExamByResitId(Integer resitId) {
        return sysResitExamMapper.selectSysResitExamByResitId(resitId);
    }

    /**
     * 查询学生补考列表
     * 
     * @param sysResitExam 学生补考
     * @return 学生补考
     */
    @Override
    public List<SysResitExam> selectSysResitExamList(SysResitExam sysResitExam) {
        return sysResitExamMapper.selectSysResitExamList(sysResitExam);
    }

    /**
     * 新增学生补考
     * 
     * @param sysResitExam 学生补考
     * @return 结果
     */
    @Override
    public int insertSysResitExam(SysResitExam sysResitExam) {
        // 验证原始成绩必须小于60分才能参加补考
        if (sysResitExam.getOriginalScore() == null
                || sysResitExam.getOriginalScore().compareTo(new BigDecimal("60")) >= 0) {
            throw new ServiceException("只有不及格（原始成绩小于60分）的学生才能参加补考");
        }
        sysResitExam.setCreateTime(DateUtils.getNowDate());
        return sysResitExamMapper.insertSysResitExam(sysResitExam);
    }

    /**
     * 修改学生补考
     * 
     * @param sysResitExam 学生补考
     * @return 结果
     */
    @Override
    public int updateSysResitExam(SysResitExam sysResitExam) {
        // 验证原始成绩必须小于60分才能参加补考
        if (sysResitExam.getOriginalScore() != null
                && sysResitExam.getOriginalScore().compareTo(new BigDecimal("60")) >= 0) {
            throw new ServiceException("只有不及格（原始成绩小于60分）的学生才能参加补考");
        }
        sysResitExam.setUpdateTime(DateUtils.getNowDate());
        return sysResitExamMapper.updateSysResitExam(sysResitExam);
    }

    /**
     * 批量删除学生补考
     * 
     * @param resitIds 需要删除的学生补考主键
     * @return 结果
     */
    @Override
    public int deleteSysResitExamByResitIds(Integer[] resitIds) {
        return sysResitExamMapper.deleteSysResitExamByResitIds(resitIds);
    }

    /**
     * 删除学生补考信息
     * 
     * @param resitId 学生补考主键
     * @return 结果
     */
    @Override
    public int deleteSysResitExamByResitId(Integer resitId) {
        return sysResitExamMapper.deleteSysResitExamByResitId(resitId);
    }

    /**
     * 检查补考记录是否存在
     * 
     * @param sysResitExam 学生补考信息
     * @return 是否存在
     */
    @Override
    public boolean checkResitExamExists(SysResitExam sysResitExam) {
        if (sysResitExam.getUserId() == null || sysResitExam.getSubjectId() == null) {
            return false;
        }
        // 构建查询条件
        SysResitExam query = new SysResitExam();
        query.setUserId(sysResitExam.getUserId());
        query.setSubjectId(sysResitExam.getSubjectId());

        // 如果有成绩ID，也加入查询条件
        if (sysResitExam.getScoreId() != null) {
            query.setScoreId(sysResitExam.getScoreId());
        }

        List<SysResitExam> list = sysResitExamMapper.selectSysResitExamList(query);
        return list != null && !list.isEmpty();
    }
}
